#!/bin/bash

set -e

# select table_name, col_name from information_schema.ins_columns where table_type = 'SUPER_TABLE' and col_type = 'TIMESTAMP' and db_name = 'iot_ts' and table_name='properties_g_modbus' and col_name in ('ts','_ts');

# 测试动态查询超级表的主键列

user="root"
pwd="taosdata"
db="iot_ts"

# ------------------------------------------ 封装的函数 ------------------------------------------

function execute_sql(){
    local sql=$1
    taos -u "$user" "-p$pwd" -s "$sql"
}

#
# 删除多余的信息，用于处理 “TDengine 连接过程” 打印的内容
#
function process_connected(){
    sed '{
        /^failed to create dir/d      # 删除以 "failed to create dir" 开头的行
        /^Welcome to the TDengine/d   # 删除以 "Welcome to the TDengine" 开头的行
        /^Copyright/d                 # 删除以 "Copyright" 开头的行
        /^$/d                         # 删除空行
        /^taos>/d                     # 删除以 "taos>" 开头的行
        /^\r/d                        # 删除紧跟 "taos>" 后的回车符        
        /^Query OK/d                  # 删除以 "Query OK" 开头的行        
    }'    
}

#
# 删除多余的信息，用于处理 “查询一个数据库中有哪些超级表” 打印的内容
# 参数 $1: 列名，比如下面的多行字符串中，参数要 $1 传入 "col_name"，就能删除第 1 行的内容
# 
#             col_name            |  // line 1
# =================================  // line 2
#  _ts                            |  // line 3
#
#
function process_column_head(){
    head_name="$1"
    # -e "/\s\+$head_name\s\+|/d" \  # 删除形如 "     stables_name     |" 的行
    # -e "/=\+/d"                 \  # 删除形如 "=======================" 的行
    # -e "s/|\r//"                   # 替换："|" --> ""
    # -e "s/[[:space:]]*//g"         # 删除    
    value=$(sed -e "/\s\+$head_name\s\+|/d" -e "/=\+/d" -e "s/|\r//" -e "s/[[:space:]]*//g")
    echo "$value"
}

#
# 删除多余的信息，用于处理 “查询一个数据库中有哪些超级表” 打印的内容
#
function process_list_super_tables(){
    sed '{
        /\s\+stable_name\s\+|/d       # 删除形如 "     stables_name     |" 的行
        /=\+/d                        # 删除形如 "=======================" 的行
        s/|\r//                       # 替换："|" --> ""        
    }'
}

#
# 删除多余的信息，用于处理 “查询一个超级表下有哪些子表” 打印的内容
#
function process_list_child_tables(){
    sed '{
        /\s\+table_name\s\+|/d        # 删除形如 "     table_name     |" 的行
        /=\+/d                        # 删除形如 "=====================" 的行
        s/|\r//                       # 替换："|" --> ""，注意："|" 后是跟了一个回车符的，使用 cat -A xxx.txt 可以看到不可见的控制字符
    }'
}

#
# 删除多余的信息，用于处理 “查询超级表建表语句” 打印的内容
#
function process_show_create_super_table(){
    sed '{
        /^\*\+\s\+1.row\s\+\*\+/d                     # 删除形如 "******** 1.row ********" 的行
        /^\s\+Table:\s\{1\}/d                         # 替换："Table: " --> ""  
        s/Create Table: //                            # 替换："Create Table: " --> ""
        s/CREATE STABLE/CREATE STABLE IF NOT EXISTS/  # 替换："CREATE STABLE"  --> "CREATE STABLE IF NOT EXISTS"
        s/\r$//                                       # 删除行末的控制字符 "^M" 即回车（Carriage Return）
        s/$/&;/                                       # 每行行尾加分号 ";"
    }'
}

#
# 删除多余的信息，用于处理 “查询子表建表语句” 打印的内容
#
function process_show_create_child_table(){
    sed '{
        /^\*\+\s\+1.row\s\+\*\+/d                     # 删除形如 "******** 1.row ********" 的行
        /^\s\+Table:\s\{1\}/d                         # 替换："Table: " --> ""  
        s/Create Table: //                            # 替换："Create Table: " --> ""
        s/CREATE STABLE/CREATE STABLE IF NOT EXISTS/  # 替换："CREATE TABLE"  --> "CREATE TABLE IF NOT EXISTS"
        s/\r$//                                       # 删除行末的控制字符 "^M" 即回车（Carriage Return）
        s/$/&;/                                       # 每行行尾加分号 ";"
    }'
}


# ------------------------------------------ 查超级表信息 ------------------------------------------

# 先查询有哪些超级表
query_stable_primary_key="select col_name from information_schema.ins_columns where table_type = 'SUPER_TABLE' and db_name = 'iot_ts' and table_name='properties_g_modbus' limit 1;"
#super_tables=($(execute_sql "$query_stable_primary_key" | process_connected | process_list_super_tables))
execute_sql "$query_stable_primary_key" | process_connected | process_column_head "col_name"
